<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
       <script>
        /**
         * 前导：函数加async修饰符，返回值是promise，此promise叫做【async函数的promise】
         * 【async函数的promise】成功和失败由谁决定？
         * 和函数的return值有关系
         * 
         * 1.return一个非promise值的时候，【async函数的promise】一定是成功的，该promise值是return的值
         * 2.return一个promise值
         *     a.return的promise值是成功的，那么【async函数的promise】就是成功的，值是return的promise的值
         *     b.return的promise值是失败的，那么【async函数的promise】就是失败的，值是return的promise的值
         * 3.async函数内，如果抛出错误，
         *     那么【async函数的promise】就是失败的，值是抛出错误的值
         * 
         * async function fn() {
          return undefined
          return 125
          return [1,2]

          return Promise.resolve('gechen')
          return Promise.reject('gc')

          throw 666
         }

         let res = fn()
         console.log(res);
         * 
         * 
         * 
         * await 等待，不能单度使用，必须在async函数中使用
         * 1.await 可以跟一个非promise值，表达式得到的结果就是非promise值
         * 2.await 可以跟一个成功的promise值
         *                  promise是成功的，表达式得到的结果就是这个成功的promise值
         *                  await只能跟成功的promise，若失败，会把失败外抛
         * 3.await 可以跟一个pending状态的promise，等待promise出结果，
         *              如果出不来，一直等到结果出来
         * 
         * Q：若跟一个失败的promise就报错，后续代码无法执行，怎么解决？
         * A：加try...  catch...
         * 
         * 
         * 
         * */

         async function fn() {
          // let res = await 
          // let res = await {name: '葛晨'}
          // let res = await Promise.resolve('南通')
          // let res = await Promise.reject('决绝')   //throw value
          let res = await new Promise(() => {})

          console.log(res);
        }

         fn()

         /**
          * 1.return一个非promise值的时候，【async函数的promise】一定是成功的，该promise值是return的值
          * 2.return一个promise值的时候，
          *     a.return的promise值是成功的，那么【async函数的promise】就是成功的，值是return的promise的值
          *     b。return的promise值是失败的，那么【async函数的promise】就是失败的的，值是return的promise的值
          * 3.async函数内，若抛出错误，
          *     那么【async函数的promise】就是失败的，值是抛出的错误的值
          * 
          * 
          * 1.await可以跟一个非promise值，表达式得到的结果就是非promise值
          * 2.await可以跟一个成功的peomise值，表达式得到的结果就是这个成功的promise值
          *     awit只能跟成功的promise，若失败，会把失败外抛
          * 3.await可以跟一个pending状态的promise，等待promise出结果
          *      若不出来，一直等到结果出来
          * 
          * 1.return一个非promise值的时候， 【async函数的promise】一定是成功的，该promise值是return的值
          * 2.return一个promise值的时候
          *     a.return的promise值是成功的，那么【async函数的promise】值就是成功，值是return的promise的值
          *     b.return的promise值是失败的，那么【async函数的promise】值就是失败，值是return的promise的值
          * 3.async函数内，若抛出错误，
          *     那么【async函数的promise】就是失败的，值是抛出的错误的值
          * 
          * 1.await可以跟一个非promise值，表达式得到的结果就是非promise值
          * 2.await可以跟一个成功的promise值，表达式的结果就是成功的promise值
          *             只能跟成功的promise，若失败，则把失败外抛
          * 3.await可以跟一个pendinf状态的promise，等待promise出结果
          *     若出不来，一直等到结果出来
          * 
          * 
          * 1.return一个非promise值的时候，【async函数的promise】一定是成功的，该promise值是return的值
          * 2.return一promise值的时候，
          *       return一个成功的promise值的时候，【async函数的promise】值就是成功的，值是return的promise的值
          *       return一个失败的promise值的时候，【async函数的promise】值就是失败的，值是return的promise的值
          * 3.async函数内，若抛出错误，
          *       那么【async函数的promise】就是失败的，值是抛出的错误的值
          * 
          * 1.await可以跟一个非promise值，表达式得到的结果就是非promise值
          * 2.await可以跟一个成功的promise值，表达式的结果就是成功的promise值
          *         只能跟成功的promise值，若失败，就会把失败外抛
          * 3.await可以跟一个pending状态的promise值，等待promise出结果
          *       若出不来，一直等结果出来
          * 
          * 1.return一个非promise值，【async函数的promise】值一定是成功的，该promise值是return的值
          * 2.return一个promise值
          *       a.return一个成功的promise值，【async函数的promise】值就是成功的，值是return的promise值
          *       b.return一个失败的promise值，【async函数的promise】值就是失败的，值是return的promise值
          * 3.async函数内，若抛出错误
          *       那么【async函数的promise】就是失败的，值是抛出错误的值
          * 
          * 1.await可以跟一个非promise值，表达式得到的结果就是非promise值
          * 2.await可以跟一个成功的pomise值，表达式的结果就是成功的peomise值
          *             只能跟成功的promise值，若失败，就会吧失败外抛
          * 3.await可以跟一个pending状态的promise值，等待promise出结果
          *       若不出，一直等结果出来
          * */
         

         
       </script> 
    </body>
</html>